/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.vse.adventura.po1715.xskrz00_skrivankova.gui;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.Commands;
import cz.pecinovsky.english.pojj.adv_framework.game_gui.IPlaceG;
import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import cz.pecinovsky.english.pojj.adv_framework.game_txt.ICommand;

import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_04;

import java.awt.Dimension;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.GridLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*******************************************************************************
 * Instance třídy {@code BagPane_2} představují oblasti GUI,
 * v nichž se zobrazují sousedé aktuálního prostoru,
 * tj. v prostoru, kde se právě nachází hráč.
 *
 * @author    Zuzana SKŘIVÁNKOVÁ
 * @version   0.00.000
 */
@SuppressWarnings("serial")
class PrikazovyPanel extends JPanel 
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
    
       private GUI_04 gui;
    
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří nový panel pro zobrazování příkazů.
     *
     * @param gui               GUI, které bude daný panel používat
     */
    public PrikazovyPanel(GUI_04 gui)
    {
        this.gui = gui;
        Collection<? extends ICommand> prikazy;
        
        //Získám všechny příkazy ze hry
        prikazy = gui.getGame().getAllCommands();
        
        //Převedu příkazy z kolekce do textového pole, abych je pak mohla jednoduše seřadit
        
        //Nové textové pole
        String[] prikazyTxt = new String[prikazy.size()];
       int p = 0;
       
       //Převod příkazů z kolekce do textového pole
       for (ICommand prik : prikazy) {
            prikazyTxt[p] = prik.getName();
            p = p + 1;
        }
       
       //Seřazení pole
        Arrays.sort(prikazyTxt);
       
        //Nastavení, aby se zalamovaly tlačítka
        this.setLayout(new GridLayout(3, 4));
        
        //Vytovření tlačítek z textového pole
        vytvorTlacitka(prikazyTxt);
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
    /** Vytvoří tlačítka */
   private void vytvorTlacitka(String[] prikazyTxt) {
       
       //Vytovří tlačítka a přidá posluchače
        for(int i = 0; i<prikazyTxt.length; i++) {
            JButton tlacitko = new JButton(prikazyTxt[i]);
            //Přidá tlačítko do panelu
            this.add(tlacitko);
            tlacitko.addActionListener(new Posluchac());
        }
        
    }
//== INTERNÍ DATOVÉ TYPY =======================================================
   
       private class Posluchac implements ActionListener
    {
        /***********************************************************************
         * Zadá příkaz, jehož parametrem bude nápis na tlačítku.
         *
         * @param event Ohlášená událost, od níž zjistíme nápis na tlačítku
         */
        @Override
        public void actionPerformed(ActionEvent event)
        {
            String prikaz = event.getActionCommand();
            gui.setPrikaz(prikaz);
        }

    }
   
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        BagPane_2 inst = new BagPane_2();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
